1. Technical Field
The present invention relates generally to computer systems and in particular to input/output operations of computer systems. Still more particularly, the present invention relates to an enhanced method and system for transferring input/output (IO) data from an IO device of a computer system.
2. Description of the Related Art
Connections of Input/Output (IO) devices to computer systems and the associated transfer of data to and from the connected computer system are typically supported by one of several available hardware devices and associated protocols. In most conventional computer systems, the transfer protocol utilized for local interconnection of these IO devices is Peripheral Component Interconnect (PCI) Express. PCI Express (supported by specific hardware) is an implementation of the PCI computer bus that enables faster physical layer communications via use of a network of serial interconnects (in lieu of a single bus). PCI Express utilizes a single hub with many pins on the mainboard to enable switching and parallel data transfers.
The higher speeds accomplished by PCI Express has enabled PCI express to become the new backplane standard in a majority of personal computers. This is also due in part to PCI Express' design, which enables PCI Express to be completely transparent to software developers. Thus, an operating system designed for PCI is able to boot in a PCI Express system without any code modification.
Conventional methods for enabling IO data transfer include the utilization of IO queues. However, developing queues for IO devices is currently application specific, particularly when transferring data via PCI Express. PCI Express utilizes a variable size packet-driven serial protocol to transfer data A queuing structure is required to execute these transfers in a coherent manner. These IO queues are statically configured and support only a single type of data transfer well. For example, if the IO devices that drive the traffic are varied in (1) the sizes of transfers and/or (2) the number of outstanding transactions on the link, developing the queues becomes a choice of exclusively supporting (a) many large transfers, (b) a few large transfers, (c) many small transfers, or (d) a few small transfers. Each category of data transfer operates best at a particular (single) type of queue configuration and loses operational quality for all other types of transfers and corresponding queue configurations.
The determination of which queue configuration works best for the particular IO transfer depends on what the computer system (or executing application) requests/requires. Thus, when the system/application is concurrently or sequentially providing different combinations of sizes and numbers of transactions, the statically-configured IO queues are unable to deliver high performance on all of the various configurations. The present invention recognizes and corrects this limitation in the existing IO data transfer methods, particularly those that utilize PCI Express.